package MySingleLinkedList;

public class Test {


    public static void main(String[] args) {
        SingleLinkedList sl=new SingleLinkedList();
        sl.addLast(1);
        sl.addLast(2);
        sl.addLast(3);
        sl.addLast(4);
        sl.addLast(5);
        sl.addLast(6);
        sl.createLoop();
        SingleLinkedList.ListNode ret= sl.detectCycle(sl.head);
        System.out.println(ret.val);
    }

    public static void createCut(SingleLinkedList.ListNode headA,
                                 SingleLinkedList.ListNode headB) {
        headA.next.next=headB.next.next;
    }

    public static SingleLinkedList.ListNode getIntersectionNode(SingleLinkedList.ListNode headA,
                                                         SingleLinkedList.ListNode headB) {
        //1.假设A链表长
        SingleLinkedList.ListNode pl=headA;
        SingleLinkedList.ListNode ps=headB;
        int lenA=0;
        int lenB=0;
        while(pl!=null) {
            lenA++;
            pl=pl.next;
        }
        while(ps!=null) {
            lenB++;
            ps=ps.next;
        }
        int len=lenA-lenB;
        //重新赋值以应对当len》=0不进入下面if语句时，pl和ps都为null的情况
        pl=headA;
        ps=headB;
        //2.判断len是正数还是负数
        if(len<0) {
            pl=headB;
            ps=headA;
            len=lenB-lenA;
        }//经过上面代码，pl一定指向长的链表，ps一定指向短的
        //3.让长链表把差值走完
        while(len!=0) {
            pl=pl.next;
            len--;
        }
        //一起走，直到相遇
        while(pl!=ps) {
            pl=pl.next;
            ps=ps.next;
        }
        if(pl==null) {
            return null;
        }
        return pl;
    }

    public static void main4(String[] args) {
        SingleLinkedList sl1=new SingleLinkedList();
        sl1.addLast(1);
        sl1.addLast(3);
        sl1.addLast(5);
        SingleLinkedList sl2=new SingleLinkedList();
        sl2.addLast(1);
        sl2.addLast(32);
        sl2.addLast(34);
        sl2.addLast(56);
        createCut(sl1.head,sl2.head);
        sl1.display();
        sl2.display();
        SingleLinkedList.ListNode node=getIntersectionNode(sl1.head,sl2.head);
        System.out.println(node.val);
    }

    public static void main2(String[] args) {
        SingleLinkedList sl=new SingleLinkedList();
        sl.addLast(1);
        sl.addLast(2);
        sl.addLast(3);
        sl.addLast(3);
        sl.addLast(2);
        sl.addLast(1);
        System.out.println(sl.chkPalindrome());
    }
    public static void main1(String[] args) {
        SingleLinkedList sl=new SingleLinkedList();
//        sl.createList();
//        sl.display();
//
//        System.out.println(sl.size());
//        System.out.println("=======");
//        sl.addFirst(500);
//        sl.addFirst(400);
//        sl.addFirst(300);
//        sl.addFirst(200);
//        sl.display();
//        System.out.println("=========");
        sl.addLast(1);
        sl.addLast(2);
        sl.addLast(3);
        sl.addLast(4);
        sl.display();
        System.out.println("===========");
        sl.addIndex(0,100);
        sl.addIndex(4,100);
        sl.addIndex(6,100);
        sl.display();
        System.out.println("==========");
        System.out.println(sl.contains(200));
        System.out.println("=========");
//        sl.remove(100);
        sl.removeAllKey(100);
        sl.display();
    }
}
